From: Stefan Monnier Date: Wed, 6 May 2009 03:09:11 +0000 (+0000) Subject: (ns_get_screen): Rewrite. X-Git-Tag: archive/raspbian/1%29.2+1-2+rpi1~1^2~421^2~651 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:///%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:/?a=commitdiff_plain;h=3a6a8b4f862c04abe4816c083d1a40914b9b49ae;p=emacs.git (ns_get_screen): Rewrite. Don't presume selected-frame is of type `ns'. --- diff --git a/src/ChangeLog b/src/ChangeLog index 9111ada1160..f17658eb11e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2009-05-06 Stefan Monnier + * nsfns.m (ns_get_screen): Rewrite. + Don't presume selected-frame is of type `ns'. + * font.c (font_update_drivers): Sanity fallback to avoid disabling all drivers. diff --git a/src/nsfns.m b/src/nsfns.m index b6d0d189cc5..13f9953554f 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -203,46 +203,32 @@ ns_get_window (Lisp_Object maybeFrame) static NSScreen * -ns_get_screen (Lisp_Object anythingUnderTheSun) -{ - id window =nil; - NSScreen *screen = 0; - - struct terminal *terminal; - struct ns_display_info *dpyinfo; - struct frame *f = NULL; - Lisp_Object frame; - - if (INTEGERP (anythingUnderTheSun)) { - /* we got a terminal */ - terminal = get_terminal (anythingUnderTheSun, 1); - dpyinfo = terminal->display_info.ns; - f = dpyinfo->x_focus_frame; - if (!f) - f = dpyinfo->x_highlight_frame; - - } else if (FRAMEP (anythingUnderTheSun) && - FRAME_NS_P (XFRAME (anythingUnderTheSun))) { - /* we got a frame */ - f = XFRAME (anythingUnderTheSun); - - } else if (STRINGP (anythingUnderTheSun)) { /* FIXME/cl for multi-display */ - } - - if (!f) - f = SELECTED_FRAME (); - if (f) +ns_get_screen (Lisp_Object screen) +{ + struct terminal *terminal = get_terminal (screen, 1); + if (terminal->type != output_ns) + // Not sure if this special case for nil is needed. It does seem to be + // important in xfns.c for the make-frame call in frame-initialize, + // so let's keep it here for now. + return (NILP (screen) ? [NSScreen mainScreen] : NULL); + else { - XSETFRAME (frame, f); - window = ns_get_window (frame); + struct ns_display_info *dpyinfo = terminal->display_info.ns; + struct frame *f = dpyinfo->x_focus_frame; + if (!f) + f = dpyinfo->x_highlight_frame; + if (!f) + return NULL; + else + { + id window = nil; + Lisp_Object frame; + eassert (FRAME_NS_P (f)); + XSETFRAME (frame, f); + window = ns_get_window (frame); + return window ? [window screen] : NULL; + } } - - if (window) - screen = [window screen]; - if (!screen) - screen = [NSScreen mainScreen]; - - return screen; }